package ui.tablemodels;

import java.util.ArrayList;

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

import beans.Ausbilder;
import beans.Betrieb;

/**
 * Erzeugt ein TableModel zum Anzeigen/Editieren von Ausbildern
 * @author nikolaus.florian
 *
 */
public class AusbilderDTM extends AbstractTableModel {
	private ArrayList<Ausbilder> ausbilders;
	private ArrayList<TableModelListener> tml;
	
	public AusbilderDTM(ArrayList<Ausbilder> ausbilders) {
		this.ausbilders = ausbilders;
	}
	
	public AusbilderDTM() {};
	
	public ArrayList<Ausbilder> getAusbilders() {
		return ausbilders;
	}

	public void setAusbilders(ArrayList<Ausbilder> ausbilders) {
		this.ausbilders = ausbilders;
	}
	
	public void addAusbilder(Ausbilder ausbilder) {
		int index = this.ausbilders.size();
		this.ausbilders.add(ausbilder);
		TableModelEvent event = new TableModelEvent(this, index, index, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
		fireTableChanged(event);
	}

	public void removeAusbilder(int index_from, int index_to) 
	{
		TableModelEvent event = new TableModelEvent(
				this,
				index_from,
				index_to,
				TableModelEvent.ALL_COLUMNS,
				TableModelEvent.DELETE);
		fireTableChanged(event);
		for(int x = index_to; x >= index_from; x--) {
			this.ausbilders.remove(x);
		}
	}

	@Override
	public int getRowCount() {
		return this.ausbilders.size();
	}

	@Override
	public int getColumnCount() {
		return 7;
	}

	@Override
	public String getColumnName(int columnIndex) {
		switch(columnIndex) {
		case 0: return "ID";
		case 1: return "Betriebnr";
		case 2: return "Anrede";
		case 3: return "Name";
		case 4: return "Vorname";
		case 5: return "Email";
		case 6: return "Tel";
		default: return "n/a";
		}
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if(columnIndex != 0) return true;
		return false;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		switch(columnIndex) {
		case 0: return this.ausbilders.get(rowIndex).getAusbilder_nr();
		case 1: return this.ausbilders.get(rowIndex).getBetrieb_nr();
		case 2: return this.ausbilders.get(rowIndex).getAnrede();
		case 3: return this.ausbilders.get(rowIndex).getNachname();
		case 4: return this.ausbilders.get(rowIndex).getVorname();
		case 5: return this.ausbilders.get(rowIndex).getEmail();
		case 6: return this.ausbilders.get(rowIndex).getTel();
		}
		return null;
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		switch(columnIndex) {
		case 1: this.ausbilders.get(rowIndex).setBetrieb_nr(Integer.parseInt((String)aValue)); break;
		case 2: this.ausbilders.get(rowIndex).setAnrede((String)aValue); break;
		case 3: this.ausbilders.get(rowIndex).setNachname((String)aValue); break;
		case 4: this.ausbilders.get(rowIndex).setVorname((String)aValue); break;
		case 5: this.ausbilders.get(rowIndex).setEmail((String)aValue); break;
		case 6: this.ausbilders.get(rowIndex).setTel((String)aValue); break;
		}
		TableModelEvent event = new TableModelEvent(this, rowIndex, rowIndex, TableModelEvent.ALL_COLUMNS, TableModelEvent.UPDATE);
		fireTableChanged(event);
	}
}
